# 方法是定义在类内部的函数，并且自带一个特殊参数（通常叫 self，针对实例方法），这个参数会自动绑定到调用该方法的实例对象上

#如果忘了哪点问问豆包，就说各种方法和普通方法对比

class Example:
    # 类属性：所有实例共享
    category = "通用示例"

    def __init__(self, name, value):
        # 初始化魔法方法：创建实例时自动调用
        self.name = name      # 实例属性
        self.value = value    # 实例属性

    # ------------------------------
    # 1. 类方法 (@classmethod)
    # 特点：第一个参数是cls（代表类本身），操作类属性
    # ------------------------------
    @classmethod
    def set_category(cls, new_category):
        # """修改所有实例共享的类属性"""
        cls.category = new_category

    @classmethod
    def create_default(cls):
        # """创建一个默认配置的实例（类方法的常见用途）"""
        return cls("默认实例", 0)

    # ------------------------------
    # 2. 静态方法 (@staticmethod)
    # 特点：无特殊参数，像普通函数一样，提供与类相关的工具功能
    # ------------------------------
    @staticmethod
    def is_positive(value):
        # """判断数值是否为正数（不依赖类或实例属性）"""
        return value > 0

    @staticmethod
    def calculate_sum(a, b):
        # """计算两数之和（纯工具函数）"""
        return a + b

    # ------------------------------
    # 3. 魔法方法（双下划线方法）
    # 特点：自动触发，用于自定义类的行为
    # ------------------------------
    def __str__(self):
        # """print()时自动调用，返回对象的字符串表示"""
        return f"Example(name={self.name}, value={self.value}, category={self.category})"

    def __add__(self, other):
        # """执行+运算时自动调用，返回两个实例value的和"""
        return self.value + other.value


# ------------------------------
# 使用示例与对比
# ------------------------------
if __name__ == "__main__":
    # 1. 测试类方法
    ex1 = Example("实例1", 10)
    ex2 = Example("实例2", 20)
    print("类方法调用前的category:", ex1.category)  # 输出：通用示例
    Example.set_category("测试示例")  # 调用类方法修改类属性
    print("类方法调用后的category:", ex2.category)  # 输出：测试示例
    default_ex = Example.create_default()  # 调用类方法创建实例
    print("类方法创建的实例:", default_ex)

    # 2. 测试静态方法
    print("\n静态方法判断正数:", Example.is_positive(5))  # 输出：True
    print("静态方法计算和:", ex1.calculate_sum(3, 7))    # 输出：10

    # 3. 测试魔法方法
    print("\n魔法方法__str__:", ex1)  # 输出：Example(name=实例1, ...)
    print("魔法方法__add__:", ex1 + ex2)  # 输出：30（10+20）

    # 总结对比表
    print("\n------------------------------")
    print("方法类型 | 第一个参数 | 调用方式          | 主要用途")
    print("---------|-----------|-------------------|-------------------")
    print("类方法   | cls       | 类名.方法()       | 操作类属性、创建实例")
    print("静态方法 | 无        | 类名.方法()/实例.方法() | 提供工具函数")
    print("魔法方法 | self      | 自动触发（如+、print） | 自定义类行为")












